﻿using System;
using System.Web;

namespace Utility.Locators
{
	public class HttpContextLocator<TService> : ILocator<TService> where TService : class
	{
		public void SetCurrent(TService service)
		{
			if (HttpContext.Current == null)
				throw new InvalidOperationException("Не удалось получить доступ к контексту Http.");

			HttpContext.Current.Items[Key] = service;
		}
		public bool HasCurrent
		{
			get { return HttpContext.Current.Items.Contains(Key); }
		}
		public virtual TService GetCurrent()
		{
			if (HttpContext.Current == null)
				throw new InvalidOperationException("Не удалось получить доступ к контексту Http.");
			if (HttpContext.Current.Items[Key] == null)
				throw new InvalidOperationException("Нельзя обращаться к локатору до инициализации его объектом службы.");

			return (TService)HttpContext.Current.Items[Key];
		}

		protected readonly Guid Key = Guid.NewGuid();
	}
}